package com.shop.shoporder.common;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;

public class HttpPost {

    /**
     * 发送HttpPost请求
     *
     * @param strURL
     *            服务地址
     * @param params
     *            json字符串,例如: "{ \"id\":\"12345\" }" ;其中属性名必须带双引号<br/>
     * @return 成功:返回json字符串<br/>
     */
    public static String post(String strURL, String params) {
        System.out.println(strURL);
        System.out.println(params);
        BufferedReader reader = null;
        try {
            URL url = new URL(strURL);// 创建连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            connection.setRequestMethod("POST"); // 设置请求方式
            // connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式
            connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式
            connection.connect();
            //一定要用BufferedReader 来接收响应， 使用字节来接收响应的方法是接收不到内容的
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8编码
            out.append(params);
            out.flush();
            out.close();
            // 读取响应
            reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
            String line;
            String res = "";
            while ((line = reader.readLine()) != null) {
                res += line;
            }
            reader.close();

            //如果一定要使用如下方式接收响应数据， 则响应必须为: response.getWriter().print(StringUtils.join("{\"errCode\":\"1\",\"errMsg\":\"", message, "\"}")); 来返回
//            int length = (int) connection.getContentLength();// 获取长度
//            if (length != -1) {
//                byte[] data = new byte[length];
//                byte[] temp = new byte[512];
//                int readLen = 0;
//                int destPos = 0;
//                while ((readLen = is.read(temp)) > 0) {
//                    System.arraycopy(temp, 0, data, destPos, readLen);
//                    destPos += readLen;
//                }
//                String result = new String(data, "UTF-8"); // utf-8编码
//                System.out.println(result);
//                return result;
//            }

            return res;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "error"; // 自定义错误信息
    }

    /**
     * 读取所有浏览器参数
     * @param request
     * @return
     */
    public static Map<String,Object> showParams(HttpServletRequest request) {
        Map<String,Object> map = new HashMap<String,Object>();
        Enumeration paramNames = request.getParameterNames();
        while (paramNames.hasMoreElements()) {
            String paramName = (String) paramNames.nextElement();

            String[] paramValues = request.getParameterValues(paramName);
            if (paramValues.length >0) {
                String paramValue = paramValues[0];
                if (paramValue.length() != 0) {
                    map.put(paramName, paramValue);
                }
            }
        }

        Set<Map.Entry<String, Object>> set = map.entrySet();
        return map;
    }


    /**
     * 读取模块数据
     * @param request 浏览对象
     * @param modUrl  模块URL
     * @param modKey  模块key
     * @param url     请求URL
     * @param parm    请求参数
     * @return        返回数据
     */
    public static String GetMod(String modurl,String url, String parm1) {

        //生成postUrl
        String postUrl = modurl + url;

        String parms="";
        String[] parmList = parm1.split("&");
        for (String parm : parmList)
        {
            String[] parmList1 = parm.split("=");
            parms +=",\""+parmList1[0]+"\":\""+parmList1[1]+"\"";
        }
        if(parms.length()>1)
        {
            parms = parms.substring(1);

            int AID =-2;
            parms +=",\"AID\":"+AID;

        }
        parms ="{"+parms+"}";

        String postJsonMod = "{\"modKey\":\"63cca9daa815b390f62f35f92e4d5392\",\"parm\":" + parms + "}";

        //返回数据
        String res = HttpPost.post(postUrl, postJsonMod);

        System.out.println(res);

        if (res.equals("error")) {
            res = "{\"code\":999999,\"msg\":\"访问错误\",\"errorDetail\":\"模块错误\",\"count\":0,\"data\":[]}";
        }
        return res;
    }

}
